//=============================================================================================
/**
 * @file	strbuf.h
 * @brief	汎用文字列バッファ型オブジェクト
 * @author	taya
 * @date	2005.11.02
 */
//=============================================================================================
#ifndef __STRBUF_H__
#define __STRBUF_H__

#include "number_str.h"



typedef struct _STRBUF	STRBUF;


//------------------------------------------------------------------
/**
 * 文字列バッファオブジェクト作成
 *
 * @param   size		格納できる文字数（EOMを含む）
 * @param   heapID		作成先ヒープID
 *
 * @retval  STRBUF*		オブジェクトへのポインタ
 */
//------------------------------------------------------------------
extern STRBUF* STRBUF_Create( u32 size, u32 heapID );


//------------------------------------------------------------------
/**
 * 文字列バッファオブジェクト削除
 *
 * @param   strbuf		オブジェクトへのポインタ
 *
 */
//------------------------------------------------------------------
extern void STRBUF_Delete( STRBUF* strbuf );


//------------------------------------------------------------------
/**
 * 内容をクリアして空文字列にする
 * （Create 直後はクリアされているので呼ぶ必要は無い）
 *
 * @param   strbuf		オブジェクトへのポインタ
 *
 */
//------------------------------------------------------------------
extern void STRBUF_Clear( STRBUF* strbuf );


//------------------------------------------------------------------
/**
 * バッファ間の文字列コピー
 *
 * @param   dst		コピー先バッファオブジェクト
 * @param   src		コピー元バッファオブジェクト
 *
 */
//------------------------------------------------------------------
extern void STRBUF_Copy( STRBUF* dst, const STRBUF* src );

//------------------------------------------------------------------
/**
 * 同じ内容のバッファを複製する
 *
 * @param   strbuf		複製元のバッファオブジェクト
 *
 * @retval  STRBUF*		複製されたバッファオブジェクト
 */
//------------------------------------------------------------------
extern STRBUF* STRBUF_CreateBufferCopy( const STRBUF* origin, u32 heapID );

//------------------------------------------------------------------
/**
 * 数値を文字列化してバッファにセットする
 *
 * @param   dst			オブジェクトへのポインタ
 * @param   number		数値
 * @param   keta		最大桁数
 * @param   dispType	表示タイプ
 * @param   codeType	文字コードタイプ
 *
 */
//------------------------------------------------------------------
extern void STRBUF_SetNumber( STRBUF* dst, int number, u32 keta, NUMBER_DISPTYPE dispType, NUMBER_CODETYPE codeType );


//------------------------------------------------------------------
/**
 * 数値を文字列化してバッファにセットする (u64 対応版)
 *
 * @param   dst			オブジェクトへのポインタ
 * @param   number		数値
 * @param   keta		最大桁数
 * @param   dispType	表示タイプ
 * @param   codeType	文字コードタイプ
 *
 */
//------------------------------------------------------------------
extern void STRBUF_SetNumber64( STRBUF* dst, u64 number, u32 keta, NUMBER_DISPTYPE dispType, NUMBER_CODETYPE codeType );

//------------------------------------------------------------------
/**
 * 文字数字を数字に変換する  18けた対応  この関数は文字コードに左右される
 *
 * @param   src			変換したい数字が入っているバッファ
 * @param   pNumber     変換し終わった数字
 * @return  成功した場合TRUE
 *
 */
//------------------------------------------------------------------

extern u64 STRBUF_GetNumber( const STRBUF* src, BOOL* pbFlag  );

//------------------------------------------------------------------
/**
 * 文字列を比較する
 *
 * @param   str1		文字列１
 * @param   str2		文字列２
 *
 * @retval  int			"0 = 一致"
 * @retval  int			"1 = 不一致"
 */
//------------------------------------------------------------------
extern int STRBUF_Compare( const STRBUF* str1, const STRBUF* str2 );

//------------------------------------------------------------------
/**
 * 格納されている文字数を返す
 *
 * @param   strbuf		文字列バッファオブジェクト
 *
 * @retval  u32		文字数
 */
//------------------------------------------------------------------
extern u32 STRBUF_GetLen( const STRBUF* strbuf );

//------------------------------------------------------------------
/**
 * 格納されている文字列が何行あるかを調べる
 *
 * @param   strbuf		文字列バッファオブジェクト
 *
 * @retval  u32		文字列の行数
 */
//------------------------------------------------------------------
extern u32 STRBUF_GetLines( const STRBUF* strbuf );

//------------------------------------------------------------------
/**
 * 文字列の、指定行のみを別バッファへコピーする
 *
 * @param   dst		コピー先バッファ
 * @param   src		コピー元バッファ
 * @param   line	行番号（0 origin）
 *
 */
//------------------------------------------------------------------
extern void STRBUF_CopyLine( STRBUF* dst, const STRBUF* src, u32 line );

//------------------------------------------------------------------
/**
 * @brief	使用許可制、文字列の内容を「…」で破壊する　ポケギアラジオモジュール専用
 *
 * @param   str		処理バッファ
 * @param   per		破壊確率(0〜100)
 *
 * ＊ポケギアのラジオ以外では使ってはいけません
 * ＊EOM_以外の特殊コードは識別しません。タグなどを含まないように！
 */
//------------------------------------------------------------------
extern void STRBUF_PMRADIO_OverwriteDot( STRBUF* str ,u8 per );


//==========================================================================================
// デバッグ用
//==========================================================================================
#ifdef PM_DEBUG
extern BOOL STRBUF_CheckValid(const void* ptr);
//--------------------------------------------------------------------------------------------
/**
 * 数値を文字列に変換（１６進）デバッグ専用
 *
 * @param   dst			[out] バッファオブジェクトへのポインタ
 * @param   number		数値
 * @param   keta		最大桁数
 * @param   dispType	表示タイプ
 * @param   codeType	文字コードタイプ
 *
 * @return	none
 *
 * @li	type = NUMBER_DISPTYPE_LEFT		左詰
 * @li	type = NUMBER_DISPTYPE_SPACE	右詰、足りない部分は空白
 * @li	type = NUMBER_DISPTYPE_ZERO		右詰、足りない部分は数字のゼロ
 */
//--------------------------------------------------------------------------------------------
extern void STRBUF_SetHexNumber(STRBUF* dst, int num, u32 keta,
								NUMBER_DISPTYPE dispType, NUMBER_CODETYPE codeType );
#endif



#endif